ENV["FASTLANE_SKIP_UPDATE_CHECK"] = "1"
opt_out_usage

default_platform(:ios)

platform :ios do
  desc "Push a new beta build to TestFlight"
  lane :deploy do
    # Make sure we are on a clean tree
    ensure_git_status_clean

    # Connect to Apple Store Connect
    app_store_connect_api_key(
      key_id: ENV["ASC_KEY_ID"],
      issuer_id: ENV["ASC_ISSUER_ID"],
      key_content: ENV["ASC_KEY_CONTENT"],
      duration: 1200,
      in_house: false
    )

    # Set the app identifier
    update_app_identifier(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "src/Info.plist",
      app_identifier: "com.atlassian.JitsiMeet.ios"
    )

    # Set the broadcast extension identifier
    update_app_identifier(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "broadcast-extension/Info.plist",
      app_identifier: "com.atlassian.JitsiMeet.ios.broadcast"
    )
    update_info_plist(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "src/Info.plist",
      block: proc do |plist|
        plist["RTCScreenSharingExtension"] = "com.atlassian.JitsiMeet.ios.broadcast"
      end
    )

    # Set the (watch) app identifier
    update_app_identifier(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "watchos/app/Info.plist",
      app_identifier: "com.atlassian.JitsiMeet.ios.watchkit"
    )

    # Set the (watch) extension identifier
    update_app_identifier(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "watchos/extension/Info.plist",
      app_identifier: "com.atlassian.JitsiMeet.ios.watchkit.extension"
    )

    update_info_plist(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "watchos/app/Info.plist",
      block: proc do |plist|
        plist["WKCompanionAppBundleIdentifier"] = "com.atlassian.JitsiMeet.ios"
      end
    )

    update_info_plist(
      xcodeproj: "app/app.xcodeproj",
      plist_path: "watchos/extension/Info.plist",
      block: proc do |plist|
        plist["NSExtension"]["NSExtensionAttributes"]["WKAppBundleIdentifier"] = "com.atlassian.JitsiMeet.ios.watchkit"
      end
    )

    # Inrement the build number by 1
    increment_build_number(
      build_number: Time.now.to_i,
      xcodeproj: "app/app.xcodeproj"
    )

    # Actually build the app
    build_app(
        scheme: "JitsiMeet",
        include_symbols: true,
        export_xcargs: "-allowProvisioningUpdates"
    )

    # Upload the build to TestFlight
    upload_to_testflight(
      beta_app_description: ENV["JITSI_CHANGELOG"],
      beta_app_feedback_email: ENV["JITSI_REVIEW_EMAIL"],
      beta_app_review_info: {
        contact_email: ENV["JITSI_REVIEW_EMAIL"],
        contact_first_name: ENV["JITSI_REVIEW_NAME"],
        contact_last_name: ENV["JITSI_REVIEW_SURNAME"],
        contact_phone: ENV["JITSI_REVIEW_PHONE"],
        demo_account_name: ENV["JITSI_DEMO_ACCOUNT"],
        demo_account_password: ENV["JITSI_DEMO_PASSWORD"],
      },
      changelog: ENV["JITSI_CHANGELOG"],
      demo_account_required: false,
      distribute_external: true,
      groups: ENV["JITSI_BETA_TESTING_GROUPS"],
      reject_build_waiting_for_review: true,
      uses_non_exempt_encryption: false
    )

    upload_symbols_to_crashlytics

    # Cleanup
    clean_build_artifacts
    reset_git_repo(skip_clean: true)
  end
end
